package com.example.websocket.excel.util;

import java.lang.reflect.Array;
import java.math.BigDecimal;
import java.util.Arrays;

/**
 * 数组工具类
 * @author Gaojt
 *
 */
public class ArrayUtils {
	/**
	 * 计算数组中该对象的数量
	 * @param array 计算的数组
	 * @param value 值
	 * @return 对象数量
	 */
	public static <T> long indexOf(T[] array, T value){
		return Arrays.stream(array).filter(e -> e != null && e.equals(value)).count();
	}
	/**
	 * 计算数组中该对象的数量
	 * @param array 计算的数组
	 * @param value 值
	 * @return 对象数量
	 */
	public static long indexOf(int[] array, int value){
		return Arrays.stream(array).filter(e -> e == value).count();
	}
	/**
	 * 填充指定字符
	 * @param n
	 * @param t
	 * @param fromIndex
	 * @param toIndex
	 */
	public static void fill(byte[] n, byte[] t, int fromIndex, int toIndex){
		int index = 0;
		for (int i = fromIndex; i < toIndex; i++) {
			n[i] = t[index++];
		}
	}
	/**
	 * 判断对象是否是数组，空值返回false
	 * @param object
	 * @return
	 */
	public static boolean isArray(Object object){
		if(object == null)
			return false;
		return object.getClass().isArray();
	}
	/**
	 * 将数组对象Object还原成数组
	 * @param value 数组对象
	 * @return 数组
	 */
	public static Object[] toArray(Object value){
		if(value == null)
			return null;
		int length = Array.getLength(value); 
		Object[] array = new Object[length];
		for (int i = 0; i < length; i++) {
			array[i] = Array.get(value, i);
		}
		return array;
	}
	/**
	 * 合计数据
	 * @param numbers
	 * @return
	 */
	public static double sum(Number... numbers){
		if(numbers == null)
			return 0;
		return Arrays.stream(numbers).filter(e -> e != null).mapToDouble(v -> v.doubleValue()).sum();
	}
	/**
	 * 合计数据
	 * @param numbers
	 * @return
	 */
	public static long sum(Integer... numbers){
		if(numbers == null)
			return 0;
		return Arrays.stream(numbers).mapToInt(v -> v == null ? 0: v.intValue()).sum();
	}
	/**
	 * 合计数据
	 * @param numbers
	 * @return
	 */
	public static BigDecimal sum(BigDecimal...numbers){
		BigDecimal rs = new BigDecimal(0);
		if(numbers == null || numbers.length == 0)
			return rs;
		for (int i = 0; i < numbers.length; i++) {
			if(numbers != null) {
				rs = rs.add(numbers[i]);
			}
		}
		return rs;
	}
}
